package com.hu.mybatis.mapper;

import com.hu.mybatis.entity.User;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface SelectMapper {

    /**
      MyBatis的各种查询功能
          1、若查询出的数据只有一条
               可以通过实体类对象接收
               可以通过 list 集合接收
               可以通过 map 集合接收
            结果: {password=123456, sex=男, id=3, age=23, email=12345@qq.com, username=admin}
          2、若查询出的数据有多条
              可以通过实体类类型的 list 集合接收
              可以通过 map 类型的 list 集合接收
              可以在 mapper 接口的方法上添加 @MapKey 注解,此时就可以将每条数据转换的 map 集合作为值,以某个字段的值作为键,放在同一个 map 集合中
            注: 一定不能通过实体类对象接收,否则会抛异常 TooManyResultsException
     */

    // 根据 id 查询用户信息
    User getUserById(@Param("id") Integer id);

    // 查询所有用户信息
    List<User> getAllUser();

    // 查询用户信息的总记录数
    Integer getCount();

    // 根据 id 查询用户信息为一个 map 集合
    Map<String,Object> getUserByIdToMap(@Param("id") Integer id);

    // 查询所有用户信息为 map 集合
//    List<Map<String,Object>> getAllUserToMap();

    /**
     *  当希望通过一个 map 接收多条数据时,可以使用 @MapKey 注解,指定某个字段的值作为键,此时就可以将每条数据转换的 map 集合作为值,放在同一个 map 集合中
     */
    @MapKey("id")
    Map<String,Object> getAllUserToMap();


}
